\documentclass[time,10pt,runningheads,a4paper]{article}


\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{xcolor}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}

\begin{document} 
\makeatletter
   
	\title{ \textbf{Diff BD}: Implementación de un Diff estructural entre dos Bases de Datos Relacionales.}
	\author{\textsc{Martinelli, Fernán G.} \\
    	    \textsc{Riberi, Franco G.} \\
			\\			
			Director: Mg. Zorzán, Fabio 
			\\
			Universidad Nacional R\'io Cuarto 
			}
	\date{\today}
	
\maketitle

\begin{abstract}
\par Se presentará una herramienta que permite realizar la comparación estructural entre dos bases de datos relacionales de un mismo tipo de motor (\textsf{MySQL} o \textsf{PostgreSQL}). Esta herramienta fue desarrollada en el lenguaje de programación \textsf{JAVA}, bajo el sistema operativo GNU/Linux. Se utilizó la \textsf{API JDBC} para la comunicación con las bases de datos. Además, esta herramienta genera un informe con las diferencias existentes entre ambas bases de datos comparables.
\par Esta herramienta es muy útil para los desarrolladores a la hora de distinguir cuál es la versión de cada base de datos, qué tiene implementada cada estructura, y permite así, rápidamente con un sólo click, aplicar los cambios a la versión más antigua para dejarla como la base de datos requerida.

\vskip 0.5cm
\textbf{Palabras clave:} Base de Datos, \textsf{SQL}, Modelo Relacional, \textsf{JAVA}, \textsf{JDBC}, \textsf{MySQL}, \textsf{PosgreSQL}.
\end{abstract}

\section{Introducción}
\par Los sistemas de información existen desde las primeras civilizaciones. En un principio, los datos se recopilaban, se
estructuraban, se centralizaban y se almacenaban convenientemente. El objetivo inmediato de este proceso era
poder recuperar estos mismos datos u otros datos derivados de ellos en cualquier momento, sin necesidad de
volverlos a recopilar, paso que solía ser más costoso. El objetivo de un sistema de información, no obstante, era proporcionar a los  usuarios información confiable sobre el dominio que representaban, con el objetivo de tomar decisiones y realizar acciones más pertinentes que las que se realizarían
sin dicha información.
\par Llamamos base de datos (BD) justamente a esta colección de datos recopilados y estructurados que existe durante
un periodo de tiempo. Por ejemplo, un libro contable, debido a su estructura, se puede considerar una base de
datos. Una novela, por el contrario, no tiene casi estructura, y no se suele considerar una base de datos.

\par Hoy en día, sin embargo, las bases de datos son consideradas grandes colecciones de informacion de cualquier tipo pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso.

\par Este proyecto surge como condición necesaria de la cátedra optativa \textit{Base de Datos II}, correspondiente a la carrera
de Licenciatura en Ciencias de la Computación dictada en la Universidad Nacional de Río Cuarto. Tiene como objetivo la implementación de una herramienta que permita realizar una comparación estructural entre dos bases de datos relacionales.

\par A continuación de detallarán brevemente algunos conceptos importantes y necesarios para la implementación de dicha herramienta.

\section{Base de Datos}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	%que es una base de datos neta 
%\textcolor{red}{¿QUE ES UNA BASE DE DATOS?}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	\par Un sistema de base de datos \cite{1}\cite{2} es básicamente un sistema computarizado para guardar registros, es decir, es un sistema 			computarizado cuya finalidad general es almacenar información y permitir a los usuarios recuperar y actualizar esa información en base a peticiones. 
%La estructura general de un sistema de base de datos se puede observar en la Figura
	\par La utilización de BD tiene varias ventajas en comparación con un sistema de procesamiento de archivos. Dentro de ellas podemos mencionar: 		

	\begin{itemize}
		\item \textit{Compactación}: No hay necesidad de grandes archivos.
		\item \textit{Velocidad}: Los motores de BD pueden recuperar y actualizar datos de forma más eficiente que algoritmos que recorren archivos y 				mucho más que un humano.
		\item \textit{Menos trabajo laborioso}: Se puede eliminar gran parte del trabajo de mantener los archivos a mano.
		\item \textit{Actualización}: La información siempre es precisa y actualizada.
		\item \textit{Control centralizado de datos}: los archivos y datos se pueden controlar de forma sistemática (no se encuentran dispersos según cada 				aplicación). A partir de esta característica se desprenden las ventajas nombradas a continuación.
			\begin{itemize}
				\item \textit{Los datos pueden compartirse}: no sólo quiere decir que los datos son accesibles desde otras aplicaciones, sino que es 						posible satisfacer los requerimientos de datos de nuevas aplicaciones sin tener que agregar información a la BD.
				\item \textit{Es posible reducir la redundancia}: Es conveniente no tener la información duplicada en varios archivos o registros (ya que 						se ocupa lugar físico innecesario y esto trae muchos problemas), salvo en casos particulares donde el negocio tiene razones sólidas 					para tener la informacion copiada en varios lugares del sistema y el desarrollador debe asumir la responsabilidad de ``propagar los 					cambios".
				\item \textit{Es posible (hasta cierto grado) evitar la inconsistencia}: Una BD inconsistente es capaz de proporcionar a sus usuarios 						información contradictoria. Esto se desprende del punto anterior, si tenemos redundancia de datos y ésta no esta controlada, la 					información puede no ser correcta.
					\item \textit{Es posible brindar un manejo de transacciones}: Una transacción es una unidad de trabajo lógica. Permite asegurar que un 						bloque de instrucciones se ejecutaran de manera atómica, y en caso de fallar se retrotraera al estado inicial.
				\item \textit{Es posible mantener la integridad} : Una BD debe, además de no tener redundancia de datos, asegurar que los 						datos que contiene sean correctos. La integridad se puede lograr estableciendo e implementando las reglas del negocio.
				\item \textit{Es posible hacer cumplir la seguridad}: Es posible definir diferentes restricciones para cada tipo de acceso.
				\item \textit{Es posible equilibrar los requerimientos en conflicto}: Una BD puede estructurar los sistemas para que el servicio general 						sea el mejor para el sistema global.
				\item \textit{Es posible hacer cumplir los estándares} : Con el control central de la BD, es posible asegurar que todos los estándares 						aplicables en la representación de datos (departamentales, de instalación, corporativos, de la industria, entre otros) sean observados.
		\end{itemize}
	\end{itemize}

	\subsection{Base de Datos Relacional}	
		\par Una \textsf{BD Relacional} es un conjunto de una o más tablas estructuradas en registros (líneas) y campos (columnas), que se vinculan entre 			sí por un campo en común, en ambos casos posee las mismas características como por ejemplo el nombre de campo, tipo y longitud; a este campo 			generalmente se le denomina ID, identificador o clave. A esta manera de construir bases de datos se le denomina \textit{Modelo Relacional} [1].
		Este modelo fue postulado en 1970 por Edgar Frank Codd\footnote{Científico informático inglés (23 de agosto de 1923-18 de abril de 2003), conocido 			por sus aportes a la teoría de bases de datos relacionales.} y básicamente utiliza un conjunto de tablas para representar tanto los datos como las 			relaciones entre ellos. Cabe destacar que existe una correspondencia directa entre el concepto de tabla y el concepto matemático de
		Relación.		

		\par Las BD relacionales pasan por un proceso al que se le conoce como \textit{normalización de una base de datos}, el cual se entiende como el 			proceso necesario para que una BD sea utilizada de manera óptima.

		Algunas ventajas de este modelo son:
		\begin{itemize}
			\item Garantiza herramientas para evitar la duplicidad de registros, a través de campos claves.
			\item Garantiza la integridad referencial: Así al eliminar un registro elimina todos los registros relacionados dependientes.
			\item Favorece la normalización por ser más comprensible y aplicable.
		\end{itemize}

		Entre las desventajas de una BD relacional podemos mencionar:
		\begin{itemize}
			\item Presentan deficiencias con datos gráficos, multimedia y sistemas de información geográfica.
			\item No se manipulan de forma manejable los bloques de texto como tipo de dato.
		\end{itemize}

		%\textcolor{red}{COMPLETE}
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		%complete
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		\subsection{SQL}
				\par El \textsf{lenguaje de consulta estructurado} o \textsf{SQL} \cite{1} (por sus siglas en inglés \textbf{S}tructured \textbf{Q}uery 					\textbf{L}anguage), originalmente denominado  \textit{SEQUEL}, fue desarrollado en IBM Research a principio de los años 					setenta. Este lenguaje es el estándar para trabajar con bases de datos 	relacionales y es soportado por todos los motores del mercado. 

			\par El lenguaje se divide en tres partes:
				\begin{itemize}
					\item \textbf{Lenguaje de Manipulación de Datos} (\textsf{DML} siglas en ingles): Brinda instrucciones que incluyen un lenguaje de 							consultas, basado en el Álgebra Relacional, además incluye de sentencias para agregar modificar y eliminar datos.
					\item \textbf{Lenguaje de Definición de Datos} (\textsf{DDL} siglas en ingles): Proporciona instrucciones para la definición del 							esquema (Estructura) de la BD, por ejemplo crear tablas, índices, etcétera.
					\item \textbf{Lenguaje de Control de Datos} (\textsf{DCL} siglas en ingles): contiene instrucciones que permiten manipular los 							permisos sobre las BD y sus objetos.
				\end{itemize}

		%ver si no iría dentro del Base de datos relacional
       \subsubsection{Conceptos Necesarios} 
			\par En esta subsección se desarrollará el concepto de algunos elementos de \textsf{SQL} necesarios para el \textsf{diffBD}. \\

			\begin{itemize}
			\item \textsf{INFORMATION\_SCHEMA}: En SQL los términos ``catálogo'' y ``esquema'' tienen un significado muy especifico. Un catálogo de 					SQL	consiste en los descriptores de una base de datos individual, mientras que un esquema de SQL consiste en los descriptores de esa 						parte de la base de datos que pertenece a un usuario individual (de estos descriptores es de donde se va a extraer la información 						para comparar las bases de datos más adelante).
	
			\item \textsf{TRANSACTIONs}: Una transacción es una unidad de la ejecución de un programa que accede y posiblemente actualiza varios 						elementos de datos.	

				\item \textsf{TRIGGERs}: Un trigger es una orden que se ejecuta automáticamente ante alguna modificación en la BD. Es necesario 							especificar la condición de disparo y las acciones que se van a ejecutar cuando la condición de disparo se cumpla.

				\item \textsf{PROCEDUREs}: Es un procedimiento que contiene comandos \textsf{SQL} que son almacenados en el servidor de BD los cuales 						pueden ser invocados por los clientes. Cada motor de BD posee su propio lenguaje: Oracle (PL/SQL), Postgres (PL/pgSQL), MySQL 							(SQL:2003).

				\item \textsf{INDEXs}: Crea un índice relacional en una tabla especificada o una vista de una tabla especificada. Se puede crear un índice antes de que la tabla posea datos. Los índices relacionales se pueden crear en tablas o vistas de otra base de datos especificando un nombre completo de base de datos. Los índices nos ayudan a obtener datos de las tablas en forma más rápida.

				\item \textsf{VIEWs}: Son relaciones que no forman parte del modelo lógico pero se hacen visible a los usuarios como relaciones virtuales.

				\item \textsf{PRIMARY KEYs}: Se utiliza para definir la clave principal de la tabla. Después de las palabras PRIMARY KEY se indica entre paréntesis el nombre de la columna o las columnas que forman la clave principal que identificara cada registro de la tabla.

				\item \textsf{FOREIGN KEYs}: Indica referencias a claves externas a una entidad. Formalmente, sea $r1(R1)$ y $r2(R2)$ relaciones con 						clave primaria $C1$ y $C2$ respectivamente. Se dice que un subconjunto $\alpha$ de $R2$ es una clave externa que hace referencia a C1 						de la relación $r1$ si se exige que, para cada tupla $t2$ de $r2$, debe haber una tupla $t1$ de $r1$ tal que $t1[C1]=t2[\alpha]$.

				\item \textsf{UNIQUEs}: Básicamente es una restricción de integridad. La especificación \textit{unique} indica que ciertos atributos 						forman una clave candidata, lo que significa que ningún par de tuplas de la relación puede ser igual en todos los atributos de la 						clave primaria.

				\item \textsf{TYPE}: refiere al tipo de cada dato. Los motores de BD poseen una gran cantidad de tipos.
			\end{itemize}

	\subsection{MySQL}
		\par \textsf{MySQL} \cite{4} es un sistema de gestión de bases de datos relacional, multihilo y multiusuario muy utilizado en aplicaciones web. 		Por un lado se ofrece bajo la licencia \textit{GPL} \cite{5}, pero además existe una versión privativa para aplicaciones comerciales. Está 			desarrollado en su mayor parte en ANSI C.
		\par Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y los derechos de autor del código están 			en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código.
		\par MySQL es muy utilizado en aplicaciones web, como Drupal o phpBB, en plataformas (Linux/Windows-Apache-MySQL-PHP/Perl/Python), y por herramientas de seguimiento de errores como Bugzilla. Su popularidad como aplicación web está muy ligada a PHP, que a menudo aparece en combinación con MySQL.
MySQL es una base de datos muy rápida en la lectura cuando utiliza el motor no transaccional MyISAM, pero puede provocar problemas de integridad en entornos de alta concurrencia en la modificación. En aplicaciones web hay baja concurrencia en la modificación de datos y en cambio el entorno es intensivo en lectura de datos, lo que hace a MySQL ideal para este tipo de aplicaciones. Sea cual sea el entorno en el que va a utilizar MySQL, es importante monitorizar de antemano el rendimiento para detectar y corregir errores tanto de SQL como de programación.

	\subsection{PostgreSQL}		
		\par \textsf{PostgreSQL} \cite{6} es un sistema de gestión de bases de datos relacionales de código abierto, distribuido bajo licencia 				BSD\footnote{Licencia de software otorgada principalmente para los sistemas BSD (Berkeley Software Distribution). Es una licencia de software 				libre permisiva como la licencia de OpenSSL o la MIT License. Esta licencia tiene menos restricciones en comparación con otras como la GPL 				estando muy cercana al dominio público. La licencia BSD al contrario que la GPL permite el uso del código fuente en software no libre.}. El 			nombre ``Postgres'' proviene del nombre de un sistema pionero de bases de datos relacionales conocido como \textit{Ingres}.
		\par \textsf{PostgreSQL} se puede ejecutar bajo cualquier sistema operativo. Además ofrece interfaces nativas para \textsf{JDBD}, como así también 				enlaces con la mayor parte de los lenguaje de programación tradicionales como C, C++, PHP, Python, entre otros.
		\par PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la estabilidad del sistema. Un fallo 			en uno de los procesos no afectará el resto y el sistema continuará funcionando.
		\par Mediante un sistema denominado MVCC (Acceso concurrente multiversión, por sus siglas en inglés) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visión consistente de lo último a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas común en otras bases, eliminando la necesidad del uso de bloqueos explícitos.

	\subsection{API JDBC}
		\par \textsf{Java Database Connectivity}, más conocida por sus siglas \textsf{JDBC} \cite{7}, es una \textsf{API} que permite la ejecución de 			operaciones sobre bases de datos desde el lenguaje de programación \textsf{JAVA}, independientemente del sistema operativo donde se ejecute o de 			la base de datos a la cual se accede siempre y cuando exista el driver de acceso.

		\par El \textsf{API JDBC} se presenta como una colección de interfaces \textsf{JAVA} que se ubica como una capa intermedia entre la aplicación 			propiamente dicha y el driver de acceso corresponiente a cada BD, como se exhibe en la Figura\~{jdbc}. Para utilizar una base de datos particular, 			el usuario debe ejecutar su programa junto a la biblioteca de conexión apropiada al modelo de su base de datos, y acceder a ella estableciendo una 			conexión. Para ello provee un localizador a la base de datos y posee parámetros de conexión específicos. A partir de allí se puede realizar 		cualquier tipo de tarea con la base de datos a las que se tenga permiso (\textbf{e.g} consultas, actualizaciones, creación, modificación y borrado 			de tablas, entre otras). 

		\begin{figure}[ht]
			\begin{center}
					\includegraphics[width=1.2638in,height=2.0744in]{jdbc.png}
				\caption{Arquitectura \textsf{JDBC}.}
				\label{jdbc}
			\end{center}
		\end{figure}

		\noindent \par JDBC ofrece el paquete java.sql \cite{8}, en el que existen clases muy útiles para trabajar con bases de datos desde \textsf{JAVA}. 			En la siguiente tabla se observan las principales clases que conforman la \textsf{API}.

		\begin{center}
			\begin{tabular}{| l | l |}
				\hline
				{\bf Clase} & {\bf Descripción}\\
				\hline
				\hline		
				DriverManager &	Carga el driver de una BD en particular \footnote{Programa informático que permite al sistema operativo interactuar con un 																			periférico, haciendo una abstracción del hardware y proporcionando una interfaz 																		para usarlo. Cada motor de BD posee su driver específico.} \\\hline
				Connection & Representa una conexión a la BD \\\hline
				Statement &  Representa una sentencia \textsf{SQL} \\\hline
				ResultSet &  Almacena el resultado retornado por la ejecución de un Statement\\\hline							
			\end{tabular}
		\end{center}		

		A continuación se exhibe un ejemplo de como establecer una conexión y como recorrer el resultado de una consulta en una BD Mysql.
	\begin{verbatim}
       String driver = "org.gjt.mm.mysql.Driver";
       String url = "jdbc:mysql://localhost/nameBD";
       String username = "root";
       String password = "root";
       // Load database driver if not already loaded.
       Class.forName(driver);
       // Establish network connection to database.
       Connection connection =
       DriverManager.getConnection(url, username,password);

       Statement statement = connection.createStatement();
       String query = "SELECT * FROM table";
       ResultSet resultSet = statement.executeQuery(uery);
       while(resultSet.next())
       {
          System.out.print(" DNI: " + resultSet.getString(1));
          ...
       }
 	\end{verbatim}

\section{Implementación}
       \subsection{Objetivo}
	       A menudo un desarrollador de software que trabaja con BD relacionales tiene la necesidad de distinguir estructuralmente entre dos versiones de 				una misma base de datos. Una en su propio entorno de desarrollo y otra en producción, las dos en entorno de desarrollo (cada una con distintos 				grados de avance), o BD diferentes las cuales se desea comparar estructuralmente para extraer información del sistema. \\
	       A raiz de esta necesidad, se requiere encontrar una manera mecánica de comparar la estructura de dos base de datos relacionales.
       
       \subsection{Java}
       	\textsf{Java} \cite{9} es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje toma mucha de 			su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, como la manipulación directa de punteros 			o memoria.
       %que es \\
		\subsubsection{Características generales} 
	       \begin{itemize}
			   \item \textsf{Java} se ha convertido en un lenguaje con una implantación masiva en todos los entornos (personales y empresariales).
			   \item Independencia de la plataforma.
			   \item Permite aplicaciones con GUI\footnote{Interface Gŕafica de Usuario}.
			   \item Posee Garbage Colector,lo que facilita el uso de referencias.
			   \item Orientado a objetos.
			   \item Permite manejo de excepciones.
    	   \end{itemize}

       Bajo todas éstas condiciones y teniendo en cuenta las caracteristicas mencionadas, se optó por elegir \textsf{Java} como lenguaje de programación para desarrollar la herramienta \textsf{Diff BD}, utilizando la \textsf{API JDBC} para comunicarse con los motores de base de datos a través del lenguaje estándar \textsf{SQL}.
       
       \subsection{Diseño}

		El proceso de diseño de esta aplicación se compone de 4 partes. Una primer parte en donde se debe analizar de dónde extraer la información de la estructura de una base de datos, una segunda parte que analiza las diferencias de las estructuras de dos bases de datos, una tercer parte que desarrolla cómo informar en un reporte las diferencias encontradas anteriormente y una última parte que profundiza en cómo aplicarle cambios a una base de datos para llevarla a tener la estructura de la otra.

	\begin{itemize}
		\item \textbf{ Información estructural de una base de datos:} \\
		Lo primero que debemos analizar es ¿dónde se encuentra y cómo vamos a obtener la información de la estructura de una base de datos?. Pero ¿qué es la información estructural de una base de datos?, es el detalle de que tablas y procedimientos (con todos sus detalles) que posee una base de datos. La creación de tablas o procedimientos llevan asociado a ella el registro de información en un descriptor que tiene como objetivo justamente almacenar la estructura de la base de datos. Este descriptor es un catálogo SQL llamado INFORMATION\_SCHEMA. Para extraer información de este descriptor, el cual esta almacenado a su vez como tablas, vamos a utilizar consultas SQL. En la Figura 2 se grafica la interacción de DiffBD con las bases de datos.
\begin{figure}[ht]
			\begin{center}
					\includegraphics[width=2in,height=1.8in]{diffBD.jpeg}
				\caption{Acceso del programa a las estructuras de las BD.}
				\label{jdbc}
			\end{center}
		\end{figure}		
		\item  \textbf{ Comparación de dos bases de datos:} \\
\begin{figure}[ht]
			\begin{center}
					\includegraphics[width=4in,height=2.5in]{image2.jpeg}
				\caption{Uso del INFORMATION\_SCHEMA para comparar.}
				\label{jdbc}
			\end{center}
		\end{figure}
\par En la Figura 3 se muestra como DiffBD costruye los dos tipos de estructuras (tablas y procedimientos)  traves de consultas SQL y del uso del SQL Data Base Meta Data. Primero se contruyen las tablas(como estructura) a partir de la información de la tabla en si misma e información de los tipos que se utilizan en sus columnas, información sobre las restricciones de integridad referencial (claves primarias, claves unicas y claves foráneas) e información sobre los triggers que se activan bajo condiciones que afectan a dicha tabla.
\par En segundo lugar se construyen los procedimientos como estructura a partir de la información repartida en en INFORMATION\_SCHEMA sobre los procedimientos teniendo en cuenta parametros y tipos de los parametros, tipo devuelto y  nombre entre otras cosas.
\par Luego de tener las tablas y procedimientos de cada base de datos, DiffBD procede a realizar un analisis comparativo entre las entidades construidas y diferencia las exclusivas de cada base de datos, las que tienen en común exactamente igual y las que tienen en común pero con alguna diferencia estructural. Y a partir de esta información construye un reporte detallado del analisis realizado.

	%	\item  \textbf{ Generar un reporte y aplicar cambios en una base de datos:} \\
%\textcolor{red}{que informacion es importante que la herramienta nos muestre y como, y el proceso de aplicar cambios a una bD}		
	\end{itemize}
		
	Para finalizar el proceso de diseño y comenzar con la implementación de la herramienta es importante aclarar que se tuvo que analizar primero un último punto: las diferencias de implementación del estándar SQL en los diferentes motores de base de datos, ya que estas representaron un punto clave en el diseño. Al tener el cuenta los motores de bases de datos, se debe tener en cuenta el diseño de ellos ( donde guarda la información, como recuperarla, etc). 

\section{Trabajos Futuros}
		En futuras iteraciones de la herramienta se podría:
	\begin{itemize}
		\item Dar soporte a más motores de bases de datos (\textbf{e.g} Oracle y Firebird).
		\item Permitir al usuario elegir qué cambios llevar de una base de datos a la otra.
		\item Dar soporte a la edición de la estructura de la base de datos desde la misma herramienta.
	\end{itemize}

\section{Conclusión}
Diff BD es una herramienta que aporta a los desarrolladores de software un rápido análisis de dos bases de datos relacionales, construyendo un amplio reporte de las diferencias estructurales entre las tablas y entre procedimientos de dichas bases de datos. Esta información permite no solo conocer sus diferencias sino también analizar la composición resumida de cada base de datos con lo que un analista podría determinar ventajas y desventajas de cada una, y hasta diferenciar entre distintas versiones de una misma base de datos.
Esta aplicación JAVA requiere sólo de conocimientos SQL para entender como trabaja internamente , utilizando la API JDBC la aplicación JAVA mediante consultas SQL accede a información especifica de los motores de bases de datos y extrae la información, que también puede ser modificada, permitiendo así que Diff BD pueda brindar la posibilidad a su usuario de modificar una de las bases de datos agregandole las estructuras especificas de la otra base de datos y quedandose con las que tenia exclusivas ella misma y en común.
	
\begin{thebibliography}{99}
\bibitem{1} {\em{``Fundamentos de Base de Datos''. Quinta Edición}}
		\textsc {Silberschatz, Korth and Sudarshan}, McGraw Hill/Interamericana, España, 2006. ISBN: 84-481-4644-1.

\bibitem{2} {\em{``Introducción a los Sistemas de Bases de Datos''. Séptima Edición}}
		\textsc {C. J. Date}, Pearson Educación, México, 2001. ISBN: 968-444-419-2.

\bibitem{3} {\em{``La Disciplina de los Sistemas de Bases de Datos. Historia, Situación Actual y Perspectivas.''.}}
		\textsc {José Hernández Orallo}, 2002.

\bibitem{4} {\em{``MySQL 5.0 Reference Manual''}}. 2011.

\bibitem{5} {\em{``GNU General Public License''}}. Disponible en: http://www.gnu.org/licenses/

\bibitem{6} {\em{``PostgreSQL Reference Manual. Volume 1-3''}}. 
		\textsc {The PostgreSQL Global Development Group}, November 2010.

\bibitem{7} {\em{``Acceso a bases de datos desde aplicaciones Java: JDBC 2.0.''}}. 
		\textsc {M. Domínguez-Dorado}, Editorial Iberprensa (Madrid). DL M-13679-2004. Diciembre, 2004. 

\bibitem{8} {\em{``java.sql''}}. 
		Disponible en: http://docs.oracle.com/javase/6/docs/api/java/sql/package-summary.html

\bibitem{9} {\em{``JAVA''}}. 
		James Gosling, Bill Joy, Guy Steele, y Gilad Bracha, The Java language specification, tercera edición. Addison-Wesley, 2005 . ISBN 0-321-24678-0.

\end{thebibliography}

\end{document}

